/**
 * 查询用电记录命令
 */
import BaseCommand from './baseCommand';

class QueryEnergyRecordCommand extends BaseCommand {
  static CMD = 0x05; // 查询记录命令

  /**
   * 创建查询命令
   * @param {number} index - 记录索引
   * @returns {Uint8Array} 查询命令帧
   */
  static createQuery(index) {
    console.log('[记录查询] 创建命令, 索引:', index);
    
    const data = new Uint8Array(2);
    data[0] = index & 0xFF;         // 低字节
    data[1] = (index >> 8) & 0xFF;  // 高字节
    
    return this.packFrame(this.CMD, data);
  }

  /**
   * 解析响应数据
   * @param {Uint8Array} frame - 完整的响应帧
   * @returns {Object|null} 解析结果
   */
  static parseResponse(frame) {
    console.log('[记录查询] 开始解析响应');
    
    const baseResult = this.parseBaseFrame(frame);
    if (!baseResult) return null;

    if (baseResult.cmd !== this.CMD) {
      console.warn('[记录查询] 命令类型不匹配');
      return null;
    }

    if (baseResult.data.length !== 8) {
      console.warn('[记录查询] 数据长度不正确');
      return null;
    }

    try {
      const year = (baseResult.data[1] << 8 | baseResult.data[0]) + 2000;
      const month = baseResult.data[2];
      const day = baseResult.data[3];
      const energy = Number(((baseResult.data[7] << 24) | 
                     (baseResult.data[6] << 16) | 
                     (baseResult.data[5] << 8) | 
                     baseResult.data[4]) / 10).toFixed(1); // 转换为Wh

      console.log('[记录查询] 解析成功:', { year, month, day, energy });
      return { year, month, day, energy };
    } catch (err) {
      console.error('[记录查询] 解析错误:', err);
      return null;
    }
  }
}

export default QueryEnergyRecordCommand; 